home *** CD-ROM | disk | FTP | other *** search
Java Source | 1996-09-20 | 1.9 KB | 60 lines |
- //
- // a sample CD rolls 360 degrees around a random axis when you clicks it.
- //
-
- import java.util.*;
- import vrml.*;
- import vrml.node.*;
- import vrml.field.*;
-
- public class RollingCD extends Script{
- MFRotation setCDrollingAxis;
- SFTime setCDstartTime;
- float rollingParameters[] = new float[4 * 5];
- Random randomNumGenerator = new Random();
-
- public void initialize(){
- // get the reference of the event-out 'setCDrollingAxis'.
- setCDrollingAxis = (MFRotation)getEventOut("setCDrollingAxis");
-
- // get the reference of the event-out 'setCDstartTime'.
- setCDstartTime = (SFTime)getEventOut("setCDstartTime");
-
- // initialize the rolling parameters.
- // axis is set later in setRollingParameters().
- // here is to set angles.
- rollingParameters[3] = 0.0f;
- rollingParameters[7] = 1.57f;
- rollingParameters[11] = 3.14f;
- rollingParameters[15] = 4.71f;
- rollingParameters[19] = 6.28f;
- }
-
- public void processEvent(Event e){
- if(e.getName().equals("touched") == true){
- setRollingParameters();
-
- // invoke the time sensor to roll the CD.
- setCDstartTime.setValue(((ConstSFTime)e.getValue()).getValue());
- }
- }
-
- // set the rolling axis randomly.
- void setRollingParameters(){
- // angle ranging between 0 to 2PI.
- double angle = randomNumGenerator.nextDouble() * Math.PI * 2.0;
- // axis.
- double axisX = Math.cos(angle);
- double axisY = Math.sin(angle);
-
- for(int i = 0; i < 5; i++){
- rollingParameters[i * 4 + 0] = (float)axisX;
- rollingParameters[i * 4 + 1] = (float)axisY;
- rollingParameters[i * 4 + 2] = 0.0f;
- }
-
- // set keyValue field of the OrientationInterpolator.
- setCDrollingAxis.setValue(4 * 5, rollingParameters);
- }
- }
-